# 列表(数组)
# 序列数据类型，类似于tuple元组
# 他们之间区别：元组是不可变，list可变数据类型，列表可以存储多个元素，
# 元素与元素之间通过，隔开，通过[]表示,元素的类型可以为任意类型

lst = [1, 2, 'a', [123], (123, )]
lst1 = [1]
print(lst1)

# 获取列表中的元素
# 切片
print(lst[:2])

# 修改列表元素的值
# lst[0] = 123
# print(lst)
# print(lst[0])
# lst[:2] = [3, 4, 4]  # 不推荐
# print(lst)

# 通过 del 这个关键字来删除列表元素或整个列表
# del lst[0]
# print(lst)
# del lst
# print(lst)

# list常用的运算符
# +
# *
# in/not in
# in用来判断某个元素在不在列表里面
# lst2 = [2, 3, 4]
# print(1 in lst2)
# print('a' in 'b')
# print(1 in (0, ))

# 常用函数
lst = [1, 2, 3, 4, 1]

## append 往列表后面新增一个元素
# lst.append([])

## extend 往列表后面增加多个元素
# lst.extend([1, 2])

# insert  往列表的任意位置插入元素, 该位置的元素往后排
# insert 在极端条件下非常消耗性能
# lst.insert(0, 'a')

# pop 默认移除最后一个元素,可以指定下标来移除, 返回删除的值
# 在极端条件下非常消耗性能
# i = lst.pop(1)
# print(i)

# remove  根据指定的值,进行删除,如果有重复的元素,默认删除从左往右的第一个
# 如果被删除元素不存在于列表中,则报错
# lst.remove(1)

# reverse  反转列表元素
# lst.reverse()

# print(lst)

# sort 排序 默认升序
lst1 = [2, 3, 5, 4, 1]
# lst1.sort(reverse=True)

# print(lst1)

# count
# index
# clear 清楚列表中的所有元素,相当于清空列表

"""
# 列表的常用方法
# list1 = ['NN', 221, 'NN', 246, 'MS246']
# list1.append('坚果')  # 列表最后添加新元素（追加新元素）
# list1.extend([6, 7, 8])  # 追加多个元素
# list1.insert(0, 333)  # 指定索引位置，添加元素
# value = list1.pop()  # 默认移除最后的一个元素，可以指定下标，返回删除的值
# list1.remove('NN')  # 根据指定的值进行移除，,如果有重名元素，默认删除从左数第一个
# list1.reverse()  # 反转列表元素
# list1 = [123, 221, 0, 246, 56]
# list1.sort()  # 排序  默认升序
# list1.sort(reverse=True)  # 降序
# list1.clear()  # 清空列表元素
# index_value = list1.index('MS246')  # 获取元素下标
# print(index_value)
# count_value = list1.count('NN')  # 统计列表有几个指定元素
# print(count_value)
# tup1 = (1, 2, 3)
# print(type(tup1))
# list2 = list(tup1) # 元组转换列表
# print(list2)
# print(type(list2))
# len_value = len(list1)  # 获取列表长度
# print(len_value)
# print(list1)
# list1 = [123, 221, 0, 246, 56]
# print(min(list1))  # 获取最小值
# print(max(list1))  # 获取最大值
"""

# 列表推导式  面试重点!!!
# https://walker_kwu.gitee.io/my-blog/2022/07/21/python/advanced/%E6%8E%A8%E5%AF%BC%E5%BC%8F/